SQUASHFS错误:无法读取页面,...,大小 您所在的位置:网站首页 unable to read page block怎么办 SQUASHFS错误:无法读取页面,...,大小

SQUASHFS错误:无法读取页面,...,大小

2023-01-25 11:33| 来源: 网络整理| 查看: 265

我正在使用内置NAND闪存的嵌入式ARM平台。我的屋顶隔断是壁球。U-boot和内核都使用omap_ecc_bch8_code_hw。问题是一些电路板(不仅仅是一个)在断电后停止工作(它们使用了大约2个月)。启动时可以看到这些错误:

[ 8.270507] end_request: I/O error, dev mtdblock9, sector 25184 [ 8.278930] SQUASHFS error: squashfs_read_data failed to read block 0xc40396 [ 8.286376] SQUASHFS error: Unable to read fragment cache entry [c40396] [ 8.293579] SQUASHFS error: Unable to read page, block c40396, size d696 [ 8.300628] SQUASHFS error: Unable to read fragment cache entry [c40396] [ 8.307647] SQUASHFS error: Unable to read page, block c40396, size d696 [ 8.314819] SQUASHFS error: Unable to read fragment cache entry [c40396] [ 8.321838] SQUASHFS error: Unable to read page, block c40396, size d696 [ 8.328887] SQUASHFS error: Unable to read fragment cache entry [c40396] [ 8.335906] SQUASHFS error: Unable to read page, block c40396, size d696 [ 8.343017] SQUASHFS error: Unable to read fragment cache entry [c40396] [ 8.350006] SQUASHFS error: Unable to read page, block c40396, size d696 /usr/sbin/lighttpd: '/usr/lib/libpcre.so.1' is not an ELF file /usr/sbin/lighttpd: can't load library 'libpcre.so.1' 我应该如何调试这个?我还没有擦掉闪光灯,所以仍然可以对它进行一些测试。到目前为止我所做的:我在坏分区上使用了nanddump(带有-o,读取oob数据),并注意到三个ECC更正警告。当我把这个转储文件写到另一个板上时,它毫无问题地启动了。当我使用带有附加选项-n的nanddump(--noecc,无需纠错即可读取)并将其写入另一个板(使用n and write-n)时,第二个板无法启动。在我看来,这些错误是可恢复的,这就是Nanddump在第一个案例中纠正它们的原因。我比较了这两个转储,它们只是三个差异(Nanddump报告的3个ECC更正?)# diff mtd_without_ecc.hex mtd_with_ecc.hex 486347c486347 < 076bca0: 59d2 d8bc 3e89 1c67 a6c2 74a0 bc38 4873 Y...>..g..t..8Hs --- > 076bca0: 59d2 d8bc 3e09 1c67 a6c2 74a0 bc38 4873 Y...>..g..t..8Hs 783769c783769 < 0bf5980: e31e f50a e5b5 6ae5 5a67 8be1 7636 9cf2 ......j.Zg..v6.. --- > 0bf5980: e31e f50a e5b5 6aa5 5a67 8be1 7636 9cf2 ......j.Zg..v6.. 1315929c1315929 < 1414580: a9ec ef89 ac52 c8a5 61f5 5d0b 6ee2 af41 .....R..a.].n..A --- > 1414580: a9ec af89 ac52 c8a5 61f5 5d0b 6ee2 af41 .....R..a.].n..A 问题是:为什么系统不能自动更正这些错误?这是因为squashfs不是“mtd-aware”文件系统,不应该在mtd设备上使用吗?如果是的话,我应该在Ubi上用壁球吗?那么内核呢(据我所知,它必须是原始映像才能从U-boot引导它)?谢谢你的帮助!

最佳答案:

实际上,LinuxMTD层不在NAND/NOR内存上做任何维护。例如,当NAND上发生位翻转时,ECC会对其进行更正。MTD层知道这一点,但它对此没有任何作用。它只是返回错误。所以你需要在MTD上面再加一层来处理这个问题。一种解决方案是使用UBI,它是为解决这类问题而设计的。看看linux mtd上的UBI documentation。如果你想坚持使用squashfs,可以在ubi(gluebi)上添加另一个mtd抽象,然后在上面运行squashfs。结果如下:

--------------------- | SquashFS | --------------------- | MTD block | --------------------- | MTD API (gluebi) | --------------------- | UBI | --------------------- | MTD driver | --------------------- | Flash Chip | --------------------- 这张照片很吓人,但效果很好;)查看this slides from free-electrons了解更多信息(图片来自幻灯片47)。关于内核,我不确定,但我认为U-boot支持ubi。但从未尝试过…



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有